#include "chooselevesence.h"
#include<QMenuBar>
#include<QPushButton>
#include<QPainter>
#include<QTimer>
#include"mypushbutton.h"
#include<QDebug>
#include<QLabel>
#include<QSound>
chooseLeveSence::chooseLeveSence(QWidget *parent) :
    QMainWindow(parent)
{

    //配置选择关卡场景

   this->setFixedSize(430,655);
    //设置图标
    this->setWindowIcon(QIcon(":/res/Coin0001.png"));
    //设置标题
    this->setWindowTitle("选择关卡场景");
    //设置菜单栏
    QMenuBar *bar=menuBar();
    this->setMenuBar(bar);
    //设置菜单项
    QMenu *startMenu=bar->addMenu("开始");
    QAction *quitAction=startMenu->addAction("退出");
    //点击退出，实现退出游戏
    connect(quitAction,&QAction::triggered,[=](){
        this->close();
    });
    //设置选择关卡按钮的点击音效
    QSound *chooseM=new QSound(":/res/TapButtonSound.wav",this);
    //设置返回按钮的点击音效
    QSound *backM=new QSound(":/res/BackButtonSound.wav",this);
    //设置返回按钮
    MyPushButton *backBtn=new MyPushButton(":/res/BackButton.png",":/res/BackButtonSelected.png");
    backBtn->setParent(this);
    backBtn->move(this->width()-backBtn->width(),this->height()-backBtn->height());
    //点击 延时0.5s返回  版本过低 无法使用QTimer::signalShot()
    QTimer *timer=new QTimer(this);
    connect(timer,&QTimer::timeout,[=](){
        //触发返回按钮音效
        backM->play();
        emit this->chooseSenceBack(); //触发自定义信号
        timer->stop();
    });
    connect(backBtn,&QPushButton::clicked,[=](){

       timer->start(500);
    });

    //创建选择关卡的按钮
    for(int i=0;i<20;i++)
    {
        MyPushButton *btn=new MyPushButton(":/res/LevelIcon.png");

        btn->setParent(this);
        btn->move(65+i%4*80,160+i/4*80); //实现一个for循环创建一个矩阵
        //监听每个按钮的点击事件
        connect(btn,&QPushButton::clicked,[=](){
            QString str=QString("您选择的是第%1关").arg(i+1);//初始化字符串
            qDebug()<<str;
            //播放选关按钮音效
            chooseM->play();
            //进入到选关的游戏场景
            this->hide();//隐藏选关场景
            play=new playSence(i+1);//创建游戏场景
            //设置playSence的场景位置
            play->setGeometry(this->geometry());
            play->show();//显示游戏场景

            //监听所选游戏关卡的返回按钮的信号
            connect(play,&playSence::chooseSenceBack,[=](){

               //由于游戏关卡特性，此处不用hide隐藏，而用delete
               this->setGeometry(play->geometry());
               this->show();
               delete play;
               play=NULL;
            });

        });
        QLabel *label=new QLabel;
        label->setParent(this);
        label->setFixedSize(btn->width(),btn->height());
        label->setText(QString::number(i+1));
        label->move(65+i%4*80,160+i/4*80);
        //设置文字对齐方式，水平与垂直居中
        label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        //设置让鼠标进行穿透  此处不设置的画鼠标点击作用在标签上了，而非按钮上    51号属性
        label->setAttribute(Qt::WA_TransparentForMouseEvents);

    }
}
void chooseLeveSence::paintEvent(QPaintEvent *)
{
    //加载背景
   QPainter painter(this);
   QPixmap pix;
   pix.load(":/res/OtherSceneBg.png");
   painter.drawPixmap(0,0,this->width(),this->height(),pix);

   //画背景上的图标
   pix.load(":/res/Title.png");
   painter.drawPixmap((this->width()-pix.width())*0.5,30,pix);

}
